package com.youmeek.ssm.module.category.service;

import com.youmeek.ssm.module.category.model.TaxCategory;
import com.youmeek.ssm.module.category.model.TaxCode;
import com.youmeek.ssm.module.common.model.TreeNode;
import com.youmeek.ssm.module.category.vo.TaxCategoryVO;

import java.util.List;
import java.util.Map;

public interface ITaxCodeService {
    /**
     * 获取所有的税收编码
     *
     * @title: getAllTaxCode
     * @return 所有的税收编码
     */
    List<TaxCode> getAllTaxCode();

    /**
     * 获取最上级的Node
     *
     * @return 根节点
     */
    TreeNode<TaxCode> getTopNode();

    /**
     * 获取第一层Node
     * @return
     */
    TreeNode<TaxCode> getTopNodeFirstLevel();

    /**
     * 获取指定的Node
     *
     * @param mergeCoding
     * @return 指定合并编码的根节点
     */
    TreeNode<TaxCode> getSpecialNode(String mergeCoding);

    /**
     * 通过指定的mergeCoding获取指定的税收类别详情
     *
     * @param mergeCoding
     * @return 指定合并编码的税收种类详情
     */
    TaxCategoryVO getTaxCategoryDetailByMergeCoding(String mergeCoding);

    /**
     * 通过ids查询税收种类列表
     *
     * @param ids
     */
    List<TaxCategory> selectByIds(List<String> ids);


    /**
     * 获取所有叶子节点对应税收分类
     *
     * @param mergeCoding
     * @return
     */
    List<TaxCategory> getProgenyLeafs(String mergeCoding);

    /**
     * 获取所有的叶子节点
     *
     * @param mergeCoding
     * @return
     */
    List<TaxCode> getLeafTaxCodes(String mergeCoding);

    /**
     * 初始化整棵树到缓存中
     */
    void initTaxCategoryTree2Cache();

    /**
     * 获取所有的税收分类编码
     * @return
     */
    Map<String, TaxCategory> getAllTaxCategory();

    /**
     * 通过合并编码获取子节点集合
     * @param mergeCoding
     * @return
     */
    List<TaxCode> getChildsByMergeCode(String mergeCoding);
}
